/**
 * <p>Implementation classes for JSON text parsing and serialization.</p>
 * 
 * <p>
 * Internally, JSON is broken down into a series of events describing the
 * encountered data and structure types. These {@link com.alkalinesolutions.json.core.impl.JSONEvent} are used
 * as the go-between for formats.
 * </p>
 * <p>
 * There are two types of classes here:
 * <ul>
 *   <li><code>Walkers</code> which turn data into {@link com.alkalinesolutions.json.core.impl.JSONEvent JSONEvents}</li>
 *   <li><code>Emitters</code> which turn {@link com.alkalinesolutions.json.core.impl.JSONEvent JSONEvents} into some
 *    other data format (a structure tree, JSON text, etc.)</li>
 * </ul>
 * </p>
 * <p>
 * An {@link java.lang.Iterable}&lt;{@link com.alkalinesolutions.json.core.impl.JSONEvent}&gt; is the format normally used to
 * represent the list of {@link com.alkalinesolutions.json.core.impl.JSONEvent JSONEvents}. As {@link java.util.Iterator#next()} does
 * not declare exceptions, {@link java.lang.reflect.UndeclaredThrowableException} is
 * usually raised with the appropriate exception embedded as the cause.
 * </p>
 * <table>
 *   <thead>
 *     <tr><td>Emitters</td><td>Walkers</td></tr>
 *   </thead>
 *   <tbody>
 *     <tr>
 *       <td>{@link com.alkalinesolutions.json.core.impl.StructureEmitter}</td>
 *       <td>{@link com.alkalinesolutions.json.core.impl.StructureWalker}</td>
 *     </tr>
 *     <tr>
 *       <td>{@link com.alkalinesolutions.json.core.impl.CompactJSONTextEmitter}</td>
 *       <td>{@link com.alkalinesolutions.json.core.impl.JSONTextWalker}</td>
 *     </tr>
 *     <tr>
 *       <td>{@link com.alkalinesolutions.json.core.impl.FormattedJSONTextEmitter}</td>
 *       <td></td>
 *     </tr>
 *   </tbody>
 * </table>
 * <p>
 * These bits are normally combined to form more usable Serializer and 
 * Parser classes.
 * </p>
 */
package com.alkalinesolutions.json.core.impl;